package for_test

object LoopTest {
  def main(args: Array[String]): Unit = {
    // 从[1, 3]
    for (i <- 1 to 3) {
      println(i)
    }
    // 从[1, 3) 循环保护式 for循环木有continue，break
    for (i <- 1 until 3 if i != 2) {
      println(i)
    }
    // 引入变量
    for (i <- 1 to 3; j = 4 - i) {
      println(j)
    }
    // 嵌套循环
    for (i <- 1 to 3; j <- 1 to 3) {
      println("i=" + i + " j=" + j)
    }
    // 循环返回值
    val res = for(i <- 1 to 10) yield i * 2
    print(res)
    // 使用花括号代替小括号
    for (i <- 1 to 3; j = i * 2) {
      print("i=" + i + " j=" + j)
    }
    for {
      i <- 1 to 3
      j = i * 2
    } {
      print("i=" + i + " j=" + j)
    }
    // 控制步长
    for (i <- Range(1, 3, 2)) {
      print(i + " ")
    }
    // while 结果是unit类型() 因为while没有返回值，所以当要用该语句来计算并返回结果时，就不可避免
    // 的使用变量，而变量需要声明在while循环的外部，那么就等同于循环的内部对外部的变量造成影响，也就违背了函数
    // 式变成的思想
    // go语言的while和dowhile语句拿掉了
    var n = 0
    while (n < 10) {
      // var n = 0 在循环外层声明变量比在循环内部声明变量编译效率高
      n += 1
    }
  }
}
